﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;


//SUPER NOTA HEROE
//EL PROBLEMA DE LOS TEXTBOX ENLAZADOS QUE SE BORRAN LO SOLUCIONE AGREGANDOLE EL PARAMETRO
//System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged
//EN LA CLASE DESIGANER DEL FORMULARIO
//this.producto_codigoTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.ventasBindingSource, "producto_codigo", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));


namespace PL.Formularios
{
    public partial class frmVentas : Form
    {
        CultureInfo ci = new CultureInfo("Es-Es");

        public frmVentas()
        {
            InitializeComponent();
        }

        private void frmVentas_Load(object sender, EventArgs e)
        {
            ventasBindingSource.DataSource = BLL.Operadores.OperadorVentas.GetAll();
            cmbStatus.Focus();
        }

        private void cosechaBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            calculaRegistros();
            try
            {
                BLL.Operadores.OperadorVentas.Save(new Entidades.ventas
                {
                    folio = int.Parse(bindingNavigatorPositionItem.Text),
                    venta_tipo = cmbTipoVenta.Text,
                    viaje_status = cmbStatus.Text,
                    viaje_folio = int.Parse(viaje_folioTextBox.Text),
                    viaje_fecha = viaje_fechaDateTimePicker.Value,
                    viaje_dia = ci.DateTimeFormat.GetDayName(viaje_fechaDateTimePicker.Value.DayOfWeek),
                    viaje_referencia = viaje_referenciaTextBox.Text,
                    lote_codigo = int.Parse(lote_codigoTextBox.Text),
                    lote_descripcion = lote_descripcionTextBox.Text,
                    lote_lote = lote_loteTextBox.Text,
                    lote_seccion = lote_seccionTextBox.Text,
                    producto_codigo = int.Parse(productor_codigoTextBox.Text),
                    producto_descripcion = producto_descripcionTextBox.Text,
                    producto_variedad = producto_variedadTextBox.Text,
                    productor_codigo = int.Parse(productor_codigoTextBox.Text),
                    productor_descripcion = productor_descripcionTextBox.Text,
                    producto_medida = producto_medidaTextBox.Text,
                    producto_marca = producto_marcaTextBox.Text,
                    producto_tipo = producto_tipoTextBox.Text,
                    destino_cliente_codigo = int.Parse(destino_cliente_codigoTextBox.Text),
                    destino_nombre = destino_nombreTextBox.Text,
                    destino_localizacion = destino_localizacionTextBox.Text,
                    embarque_fletero = embarque_fleteroTextBox.Text,
                    embarque_presentacion = embarque_presentacionTextBox.Text,
                    embarque_unidades = double.Parse(embarque_unidadesTextBox.Text),
                    embarque_kgunidad = double.Parse(embarque_kgunidadTextBox.Text),
                    embarque_kgembarque = double.Parse(embarque_kgembarqueTextBox.Text),
                    recepcion_unidades = double.Parse(recepcion_unidadesTextBox.Text),
                    recepcion_kgunidad = double.Parse(recepcion_kgunidadTextBox.Text),
                    recepcion_kgembarque = double.Parse(recepcion_kgembarqueTextBox.Text),
                    merma_kgunidad = double.Parse(merma_kgunidadTextBox.Text),
                    merma_kgembarque = double.Parse(merma_kgembarqueTextBox.Text),
                    precio_productor = double.Parse(precio_productorTextBox.Text),
                    precio_cliente = double.Parse(precio_clienteTextBox.Text),
                    precio_real = double.Parse(precio_realTextBox.Text),
                    a_pagar_kgembarque = double.Parse(a_pagar_kgembarqueTextBox.Text),
                    a_pagar_kgunidad = double.Parse(a_pagar_kgunidadTextBox.Text),
                    a_pagar_importe = double.Parse(a_pagar_importeTextBox.Text),
                    venta_importe = double.Parse(a_pagar_importeTextBox.Text),
                    venta_pagado = double.Parse(venta_pagadoTextBox.Text),
                    venta_saldo = double.Parse(venta_saldoTextBox.Text),
                    fgs_importe = double.Parse(fgs_importeTextBox.Text),
                    fgs_pagado = double.Parse(fgs_pagadoTextBox.Text),
                    fgs_saldo = double.Parse(fgs_saldoTextBox.Text),
                    socio_importe = double.Parse(socio_importeTextBox.Text),
                    socio_pagado = double.Parse(socio_pagadoTextBox.Text),
                    socio_saldo = double.Parse(socio_pagadoTextBox.Text)
                });
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex);
            }
        }

        private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("¿Desea borrar el registro?", "Borrar registro", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (dialogResult == DialogResult.Yes)
            {
                BLL.Operadores.OperadorVentas.Delete(new Entidades.ventas
                {
                    folio = int.Parse(bindingNavigatorPositionItem.Text)
                });
            }
        }

        private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
        {
            viaje_fechaDateTimePicker.Value = DateTime.Now;
            cmbStatus.Focus();
        }

        private void picBuscar_Click(object sender, EventArgs e)
        {
            using (var formulario = new frmBuscaProductos())
            {
                var result = formulario.ShowDialog();
                if (formulario.producto != null)
                {
                    producto_codigoTextBox.Text = formulario.producto.codigo.ToString();
                    producto_descripcionTextBox.Text = formulario.producto.descripcion;
                    producto_tipoTextBox.Text = formulario.producto.producto;
                    producto_variedadTextBox.Text = formulario.producto.variedad;
                    producto_medidaTextBox.Text = formulario.producto.medida;
                    producto_marcaTextBox.Text = formulario.producto.marca;
                }
            }
            lote_codigoTextBox.Focus();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            using (var formulario = new frmBuscaLotes())
            {
                var result = formulario.ShowDialog();
                if (formulario.entidad != null)
                {
                    lote_codigoTextBox.Text = formulario.entidad.codigo.ToString();
                    lote_descripcionTextBox.Text = formulario.entidad.descripcion;
                    lote_loteTextBox.Text = formulario.entidad.lote;
                    lote_seccionTextBox.Text = formulario.entidad.seccion;
                }
            }
            recepcion_unidadesTextBox.Focus();
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            using (var formulario = new frmBuscaProductores())
            {
                var result = formulario.ShowDialog();
                if (formulario.entidad != null)
                {
                    productor_codigoTextBox.Text = formulario.entidad.codigo.ToString();
                    productor_descripcionTextBox.Text = formulario.entidad.descripcion;
                }
            }
            destino_cliente_codigoTextBox.Focus();
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {
            using (var formulario = new frmBuscaClientes())
            {
                var result = formulario.ShowDialog();
                if (formulario.entidad != null)
                {
                    destino_cliente_codigoTextBox.Text = formulario.entidad.codigo.ToString();
                    destino_nombreTextBox.Text = formulario.entidad.nombre;
                    destino_localizacionTextBox.Text = formulario.entidad.direccion;
                }
            }
            embarque_fleteroTextBox.Focus();
        }

        private void frmVentas_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dlgresult = MessageBox.Show("Desea cerrar la ventana de captura?",
            "AgriComer",
            MessageBoxButtons.YesNo,
            MessageBoxIcon.Information);
            if (dlgresult == DialogResult.No)
                e.Cancel = true;
        }

        private void calculaRegistros()
        {
            try
            {
                //CALCULO DE PROMEDIO DE KILOGRAMOS POR UNIDAD EMBARCADOS
                if(embarque_kgembarqueTextBox.Text != "" && embarque_unidadesTextBox.Text != "")
                    if(double.Parse(embarque_kgembarqueTextBox.Text)>0 && double.Parse(embarque_unidadesTextBox.Text)>0)
                        embarque_kgunidadTextBox.Text = (double.Parse(embarque_kgembarqueTextBox.Text) / double.Parse(embarque_unidadesTextBox.Text)).ToString();
                
                //CALCULO DE PROMEDIO DE KILOGRAMOS POR UNIDAD RECIBIDOS
                if(recepcion_kgembarqueTextBox.Text != "" && recepcion_unidadesTextBox.Text != "")
                    if(double.Parse(merma_kgembarqueTextBox.Text)>0 && double.Parse(recepcion_unidadesTextBox.Text)>0)
                        recepcion_kgunidadTextBox.Text = (double.Parse(recepcion_kgembarqueTextBox.Text) / double.Parse(recepcion_unidadesTextBox.Text)).ToString();

                //CALCULO DE PROMEDIO DE KILOGRAMOS POR UNIDAD DE MERMA
                if(merma_kgembarqueTextBox.Text != "" && recepcion_unidadesTextBox.Text != "")
                    if (double.Parse(merma_kgembarqueTextBox.Text) > 0 && double.Parse(recepcion_unidadesTextBox.Text) > 0)
                        merma_kgunidadTextBox.Text = (double.Parse(merma_kgembarqueTextBox.Text) / double.Parse(recepcion_unidadesTextBox.Text)).ToString();

                //CALCULO DE LOS KILOGRAMOS POR EMBARQUE A PAGAR
                if(recepcion_kgembarqueTextBox.Text != "" && merma_kgembarqueTextBox.Text != "")
                    if (double.Parse(recepcion_kgembarqueTextBox.Text) > 0 && double.Parse(merma_kgembarqueTextBox.Text) > 0)
                        a_pagar_kgembarqueTextBox.Text = (double.Parse(recepcion_kgembarqueTextBox.Text) - double.Parse(merma_kgembarqueTextBox.Text)).ToString();

                //CALCULO DE LOS KILOGRAMOS POR UNIDAD A PAGAR
                if(a_pagar_kgembarqueTextBox.Text != "" && recepcion_unidadesTextBox.Text != "")
                    if (double.Parse(a_pagar_kgembarqueTextBox.Text) > 0 && double.Parse(recepcion_unidadesTextBox.Text) > 0)
                        a_pagar_kgunidadTextBox.Text = (double.Parse(a_pagar_kgembarqueTextBox.Text) / double.Parse(recepcion_unidadesTextBox.Text)).ToString();

                //CALCULO DEL IMPORTE TOTAL A PAGAR
                if(a_pagar_kgembarqueTextBox.Text != "" && precio_clienteTextBox.Text != "")
                    if (double.Parse(a_pagar_kgembarqueTextBox.Text) > 0 && double.Parse(precio_clienteTextBox.Text) > 0)
                        a_pagar_importeTextBox.Text = (double.Parse(a_pagar_kgembarqueTextBox.Text) * double.Parse(precio_clienteTextBox.Text)).ToString();

                //CALCULO DEL PRECIO REAL DEL PRODUCTO
                if(a_pagar_importeTextBox.Text != "" && embarque_kgembarqueTextBox.Text != "")
                    if (double.Parse(a_pagar_importeTextBox.Text) > 0 && double.Parse(embarque_kgembarqueTextBox.Text) > 0)
                        precio_realTextBox.Text = (double.Parse(a_pagar_importeTextBox.Text) / double.Parse(embarque_kgembarqueTextBox.Text)).ToString();

                //CALCULO DEL IMPORTE TOTAL A PAGAR
                if (a_pagar_importeTextBox.Text != "")
                    if (double.Parse(a_pagar_importeTextBox.Text) > 0)
                        venta_importeTextBox.Text = a_pagar_importeTextBox.Text;
                
                //SI NO HAY IMPORTE DE PAGOS DE CLIENTE LO PONEMOS EN CERO
                if (venta_pagadoTextBox.Text == "")
                {
                    venta_pagadoTextBox.Text = "0";
                }

                //CALCULO DEL SALDO DE LA VENTA
                if (venta_importeTextBox.Text != "" && venta_pagadoTextBox.Text != "")
                    if (double.Parse(venta_importeTextBox.Text) > 0 && double.Parse(venta_pagadoTextBox.Text) > 0)
                        venta_saldoTextBox.Text = (double.Parse(venta_pagadoTextBox.Text) - double.Parse(venta_importeTextBox.Text)).ToString();

                //CALCULO DEL IMPORTE TOTAL DE VENTA PARA LOS RESUMENES
                if (a_pagar_importeTextBox.Text != "")
                    if (double.Parse(a_pagar_importeTextBox.Text) > 0)
                    {
                        if (cmbStatus.Text == "PAGADO" || cmbStatus.Text == "PRELIQUIDADO" || cmbStatus.Text == "SIN PRELIQUIDAR")
                        {
                            fgs_importeTextBox.Text = a_pagar_importeTextBox.Text;
                            socio_importeTextBox.Text = "0";
                        }
                        else { fgs_importeTextBox.Text = "0"; }
                        if (cmbStatus.Text == "SOCIEDAD")
                        {
                            fgs_importeTextBox.Text = (double.Parse(a_pagar_importeTextBox.Text) / 2).ToString();
                            socio_importeTextBox.Text = (double.Parse(a_pagar_importeTextBox.Text) / 2).ToString();
                        }
                        else { socio_importeTextBox.Text = "0"; }
                    }

                //CALCULO DE PAGOS DEL CLIENTE PARA LOS RESUMENES
                if (venta_pagadoTextBox.Text != "")
                {
                    if (double.Parse(venta_pagadoTextBox.Text) > 0)
                    {
                        if (cmbStatus.Text == "PAGADO" || cmbStatus.Text == "PRELIQUIDADO" || cmbStatus.Text == "SIN PRELIQUIDAR")
                        {
                            fgs_pagadoTextBox.Text = venta_pagadoTextBox.Text;
                            socio_pagadoTextBox.Text = "0";
                        }
                        else { fgs_pagadoTextBox.Text = "0"; }
                        if (cmbStatus.Text == "SOCIEDAD")
                        {
                            fgs_pagadoTextBox.Text = (double.Parse(venta_pagadoTextBox.Text) / 2).ToString();
                            socio_pagadoTextBox.Text = (double.Parse(venta_pagadoTextBox.Text) / 2).ToString();
                        }
                        else { socio_pagadoTextBox.Text = "0"; }
                    }
                }

                //CALCULO DE SALDO DE LA VENTA PARA LOS RESUMENES
                if (venta_pagadoTextBox.Text != "")
                    if (double.Parse(venta_pagadoTextBox.Text) > 0)
                    {
                        if (cmbStatus.Text == "PAGADO" || cmbStatus.Text == "PRELIQUIDADO" || cmbStatus.Text == "SIN PRELIQUIDAR")
                        {
                            fgs_saldoTextBox.Text = venta_saldoTextBox.Text;
                            socio_saldoTextBox.Text = "0";
                        }
                        else { fgs_saldoTextBox.Text = "0"; }
                        if (cmbStatus.Text == "SOCIEDAD")
                        {
                            fgs_saldoTextBox.Text = (double.Parse(venta_saldoTextBox.Text) / 2).ToString();
                            socio_saldoTextBox.Text = (double.Parse(venta_saldoTextBox.Text) / 2).ToString();
                        }
                        else { socio_saldoTextBox.Text = "0"; }
                    }
            }
            catch (Exception)
            {
            }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            calculaRegistros();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("calc");
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            Utilerias.Formularios.MuestrafrmReporte(this, 3, int.Parse(bindingNavigatorPositionItem.Text));
        }
    }
}
